package main

import (
	"bufio"
	"embed"
	"flag"
	"os"

	"gitee.com/xgotool/sqlite-logs-more/app/client"
	clientserver "gitee.com/xgotool/sqlite-logs-more/app/client_server"
	"gitee.com/xgotool/sqlite-logs-more/app/cron"
	"gitee.com/xgotool/sqlite-logs-more/app/server"
)

// 静态文件存储
//
//go:embed files/*
var files embed.FS

var (
	REMOTE_ADDR string
)

// 入口文件配置
func main() {
	// 参数配置
	pipe := ""      // 管道名称标识
	web := ""       // web端口监听
	grpc := ""      // GRPC端口监听
	remote := ""    // 远程写入地址
	root_path := "" // rootdb仓库位置
	flag.StringVar(&pipe, "pipe", "", "管道命令的标识名（若此值为空，但remote不为空(且为grpc端口)则标识持续监听相应服务）")
	flag.StringVar(&web, "web", "", "WEB端口监听，若需要启用的话请传入端口标识 :8080 / 127.0.0.1:8080")
	flag.StringVar(&grpc, "grpc", "", "GRPC端口监听，若需要启用的话请传入端口标识 :8080 / 127.0.0.1:8080")
	flag.StringVar(&remote, "remote", REMOTE_ADDR, "远程写入地址，若需要启用的话请传入：http://xxxx:8080 / grpc://xxxx:8080")
	flag.StringVar(&root_path, "root-path", "./root.db", "根目录地址，web监听/grpc监听时此值必填")
	flag.Parse()
	fileInfo, _ := os.Stdin.Stat()
	if (fileInfo.Mode() & os.ModeNamedPipe) == os.ModeNamedPipe {
		// 是通过管道输入的参数，直接进行入库
		s := bufio.NewScanner(os.Stdin)
		defer client.Close()
		for s.Scan() {
			client.PipeLog(remote, pipe, s.Text())
		}
	} else if remote != "" && web == "" && grpc == "" {
		// 作为客户端进行持续服务
		clientserver.Start(remote)
	} else {
		cron.Start()
		// 正常执行程序, 提供WEB服务、GRPC服务等
		server.Regedit(&server.Config{
			FS:       &files,
			WEB:      web,
			GRPC:     grpc,
			RootPath: root_path,
		}).Linten()
	}
}
